﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Mail;
using System.Net.Mime;

namespace Voluntariar.WEB.Util
{
    public class AnexoEmail
    {
        public string Caminho { get; set; }
        public string Nome { get; set; }
        public MemoryStream Conteudo { get; set; }

        public AnexoEmail()
        {
        }

        public AnexoEmail(string Caminho, string Nome)
        {
            this.Nome = Nome;
            this.Caminho = Caminho;
            Conteudo = null;
        }
        public AnexoEmail(string Nome, byte[] Conteudo)
        {
            this.Nome = Nome;
            this.Conteudo = new MemoryStream();
            this.Conteudo.Write(Conteudo, 0, Conteudo.Length);
            this.Conteudo.Position = 0;
        }

        public AnexoEmail Clonar()
        {
            AnexoEmail Novo = new AnexoEmail();
            Novo.Caminho = this.Caminho;
            Novo.Nome = this.Nome;
            Novo.Caminho = this.Caminho;
            if (Conteudo != null)
            {
                Novo.Conteudo = new MemoryStream();
                Conteudo.CopyTo(Novo.Conteudo);
                Novo.Conteudo.Position = 0;
                this.Conteudo.Position = 0;
            }
            return Novo;
        }
    }

    public class Email
    {
        SmtpClient SmtpServer;
        string Remetente;
        string Nome;

        public string Erro { get; set; }

        public List<string> ListaDestinatarios { get; set; }
        public List<AnexoEmail> ListaAnexos { get; set; }

        public Email(string ServidorSMTP, int Porta = 25)
        {
            SmtpServer = new SmtpClient(ServidorSMTP);
            SmtpServer.Port = Porta;
            ListaDestinatarios = new List<string>();
            ListaAnexos = new List<AnexoEmail>();
            this.HabilitarSSL();
        }

        public void HabilitarSSL(bool Habilitar = true)
        {
            SmtpServer.EnableSsl = Habilitar;
        }

        public void setAutenticacao(string Login, string Senha, string Nome = "")
        {
            SmtpServer.Credentials = new System.Net.NetworkCredential(Login, Senha);
            this.Remetente = Login;
            if (string.IsNullOrEmpty(Nome))
            {
                this.Nome = Login;
            }
            else
            {
                this.Nome = Nome;
            }
        }

        public static string getSMTP()
        {
            return "smtp.jfpr.jus.br";
            //return "smtp.ici.curitiba.org.br";
        }

        public bool Enviar(string Assunto, string Mensagem)
        {
            try
            {
               
                MailMessage mail = new MailMessage();

                mail.From = new MailAddress(this.Remetente, this.Nome);

                //Destinatarios
                foreach (string Destinatario in ListaDestinatarios)
                {
                    mail.To.Add(Destinatario);
                }

                mail.Subject = Assunto;

                mail.Body = Mensagem;

                //Anexo
                foreach (AnexoEmail Anexo in ListaAnexos)
                {
                    System.Net.Mail.Attachment attachment;

                    if (Anexo.Conteudo == null)
                    {
                        attachment = new System.Net.Mail.Attachment(Anexo.Caminho);
                    }
                    else
                    {
                        ContentType contentType = new ContentType();
                        contentType.MediaType = MediaTypeNames.Application.Octet;
                        contentType.Name = Anexo.Nome;

                        attachment = new System.Net.Mail.Attachment(Anexo.Conteudo, contentType);
                        attachment.Name = Anexo.Nome;
                        attachment.NameEncoding = System.Text.Encoding.UTF8;
                    }

                    mail.Attachments.Add(attachment);
                }

                SmtpServer.Send(mail);

                this.Erro = "";
                return true;
            }
            catch (Exception e)
            {
                if (e.InnerException == null)
                    this.Erro = e.Message;
                else
                    this.Erro = e.InnerException.Message;
                return false;
            }
        }
    }
}